package prettyprolog.engine;

import prettyprolog.datatypes.Substitution;
import prettyprolog.datatypes.Term;


public interface Unifier {

	/**
	 * Performs unification of two terms.
	 * 
	 * @param t1
	 *            the first term
	 * @param t2
	 *            the second term
	 * @param unifier
	 * 			  unifier to be used for recursive calls (e.g. to unify subterms)
	 *            
	 * @return the Substitution that unifies the two terms, or null if such a
	 *         Substitution doesn't exist.
	 */
	Substitution unify(Term t1, Term t2, Unifier unifier);

}